package com.wisdytech.linkdcs.equipStop.service.impl;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.github.pagehelper.PageInfo;
import com.wisdytech.common.bean.Filter;
import com.wisdytech.common.constants.CommonConstants;
import com.wisdytech.common.exception.ServiceException;
import com.wisdytech.common.handler.BaseService;
import com.wisdytech.common.utils.BaseUtil;
import com.wisdytech.linkdcs.account.dao.PropertyDao;
import com.wisdytech.linkdcs.account.model.Property;
import com.wisdytech.linkdcs.equipStop.dao.EquipStopDao;
import com.wisdytech.linkdcs.equipStop.model.EquipStop;
import com.wisdytech.linkdcs.equipStop.service.IEquipStopService;
import com.wisdytech.linkdcs.factory.model.Factory;
import com.wisdytech.linkdcs.system.dao.ISysDictDao;
import com.wisdytech.linkdcs.system.model.SysDict;
import com.wisdytech.linkdcs.system.model.SysOperation;
import com.wisdytech.linkdcs.system.model.SysUser;


import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author chenbin
 * @since 2018-07-20
 */
@Service("iEquipStopService")
@Transactional
public class EquipStopServiceImpl extends BaseService<EquipStopDao, EquipStop> implements IEquipStopService {

	@Resource
	private EquipStopDao equipStopDao;
	@Resource
	private ISysDictDao iSysDictDao;
	
	@Override
	public void addStop(EquipStop equipStop, String loginName) {
		EntityWrapper<EquipStop> ew = new EntityWrapper<>();
        List<EquipStop> EquipStopList = new ArrayList<>();
        EquipStopList = equipStopDao.selectPage(new Page<SysUser>(1, 1), ew.eq("STOP_CODE", equipStop.getStopCode()).eq("del_flag", CommonConstants.DEL_FLAG));
        if (!EquipStopList.isEmpty()) {
        	throw new ServiceException("该停机编码被使用");
        }
		equipStop.setPkId(BaseUtil.getUUID());
		equipStop.setDelFlag(CommonConstants.DEL_FLAG);
		int count = equipStopDao.insert(equipStop);
        if (count <= 0) {
            throw new ServiceException("新增失败");
        }
        
        //字典维护
        if(equipStop.getStopType().equals("0")) {
        	SysDict dict = iSysDictDao.selectLastDict();
        	if(dict==null) {
                SysDict sysDict = new SysDict();
                sysDict.setPkId(BaseUtil.getUUID());
                sysDict.setParentKey("STOP_REASON");
                sysDict.setDictKey("1");
                sysDict.setDictValue(equipStop.getStopReason());
                sysDict.setCreateDate(new Date());
                sysDict.setCreateUser(loginName);
                sysDict.setDictSort(1);
                sysDict.setOpenFlag("0");
                sysDict.setDelFlag(CommonConstants.DEL_FLAG);
                iSysDictDao.insert(sysDict);
        	}else {
                SysDict sysDict = new SysDict();
                sysDict.setPkId(BaseUtil.getUUID());
                sysDict.setParentKey("STOP_REASON");
                String key = dict.getDictKey();
                int k = Integer.parseInt(key);
                int newK = k+1;
                String newKey = String.valueOf(newK);
                sysDict.setDictKey(newKey);
                sysDict.setDictValue(equipStop.getStopReason());
                sysDict.setCreateDate(new Date());
                sysDict.setCreateUser(loginName);
                sysDict.setDictSort(1);
                sysDict.setOpenFlag("0");
                sysDict.setDelFlag(CommonConstants.DEL_FLAG);
                iSysDictDao.insert(sysDict);
        	}

        }
	}

	@Override
	public PageInfo<EquipStop> listStopByFilter(String stopType, String stopReason, Filter filter) {
		EntityWrapper<EquipStop> ew = new EntityWrapper<>();
		if(!stopReason.isEmpty()) {
			ew.like("STOP_REASON", stopReason);
		}
		if(!stopType.isEmpty()) {
			ew.eq("STOP_TYPE", stopType);
		}
		ew.eq("DEL_FLAG", CommonConstants.DEL_FLAG);
		List<EquipStop> list = super.beforeList(EquipStopDao.class, filter)
                .selectList(ew);
        PageInfo<EquipStop> page = new PageInfo<>(list);
        return page;
	}

	@Override
	public EquipStop getStopById(String pkId) {
		return equipStopDao.selectById(pkId);
	}

	@Override
	public void updateStop(EquipStop equipStop, String loginName) {
		EntityWrapper<EquipStop> ew = new EntityWrapper<>();;
        //验证工序编码的唯一性--修改功能
		List<EquipStop> list;
		list = equipStopDao.selectPage(new Page<EquipStop>(1, 1),ew.eq("STOP_CODE", equipStop.getStopCode()).ne("pk_id", equipStop.getPkId()));
        if (list.size() > 0){
        	throw new ServiceException("该停机编码被使用");
        }
        equipStopDao.updateById(equipStop);
	}

	@Override
	public void delStopById(String pkIds) {
        List<String> idList = new ArrayList<String>();
        String[] id = pkIds.split(",");
        for (int i = 0; i < id.length; i++) {
            idList.add(id[i]);
        }
		equipStopDao.deleteBatchIds(idList);
		
	}
}
